import threading 
import time 
import sys 
from io import StringIO 
class test:
    pass
def thread_function(): 
    while True: 
        print(333) 
        time.sleep(1) 
def main(): # 创建一个字符串IO对象用于捕获输出 
    sys.stdout = StringIO() # 创建并启动线程 
    thread = threading.Thread(target=thread_function) 
    thread.daemon = True  # 设置为守护线程，主线程结束时自动结束子线程
    thread.start() # 在主进程中不断读取捕获的输出 
    while thread.is_alive(): # 从StringIO对象中读取内容 
        output = sys.stdout.getvalue() 
        if output: print("Captured from thread:", output) # 清空StringIO对象以便捕获新的输出 
        sys.stdout.truncate(0) 
        sys.stdout.seek(0) 
        time.sleep(0.1) # 恢复标准输出 
        sys.stdout = sys.__stdout__ 
if __name__ == "__main__": 
    main()#### 解释： 1. **重定向标准输出**： - 使用 `StringIO` 对象来捕获线程中的输出。将 `sys.stdout` 重定向到这个 `StringIO` 对象。 2. **线程启动**： - 创建并启动一个线程，线程目标为 `thread_function`。 3. **实时读取输出**： - 在主进程中，通过不断读取 `StringIO` 对象中的内容来获取线程的输出。 - 使用 `sys.stdout.getvalue()` 获取当前捕获的输出。 - 输出捕获的内容后，清空 `StringIO` 对象以便捕获新的输出。 4. **恢复标准输出**： - 在主进程结束时，将 `sys.stdout` 恢复为原来的标准输出。 ### 注意事项： - 这种方法会捕获所有标准输出，包括主进程的输出。如果你希望在主进程中仍然能正常打印，可以调整逻辑只在特定情况下捕获线程输出。 - `time.sleep(0.1)` 用于控制主进程读取输出的频率，可以根据需要调整。 这种方法不需要修改线程运行的代码，可以实现对线程内 `print` 内容的实时捕获。